home *** CD-ROM | disk | FTP | other *** search
/ Atari Mega Archive 1 / Atari Mega Archive - Volume 1.iso / language / gemfsc18.lzh / AESSRC18.LZH / AESFUNCS / WNDUPDAT.C < prev   
C/C++ Source or Header  |  1992-03-06  |  1KB  |  31 lines

  1. /**************************************************************************
  2.  * WNDUPDAT.C - Implement nested wind_update() logic.
  3.  *************************************************************************/
  4.  
  5. #include "gemfast.h"
  6.  
  7. #undef wind_update    /* undo GEMFAST.H remapping, we need The Real Thing */
  8.  
  9. static int  windowcount;
  10. static int  mousecount;
  11.  
  12. int wnd_update(flag)
  13. {
  14.     int *counter;
  15.     
  16.     counter = (flag & 0x0002) ? &mousecount : &windowcount;
  17.     
  18.     if (flag & 0x0001) {                /* BEG_UPDATE or BEG_MCTRL, count */
  19.         if (++(*counter) == 1) {        /* it. if we went from 0 to 1, we */
  20.             return wind_update(flag);   /* need to aquire the semaphore.  */
  21.         }
  22.     } else {                                /* END_UPDATE or END_MCTRL    */
  23.         if (*counter > 0) {                 /* if we're currently holding */ 
  24.             if (--(*counter) == 0) {        /* semaphore, decr count, if  */
  25.                 return wind_update(flag);   /* it goes to 0, release it.  */
  26.             }
  27.         }
  28.     }
  29.     return 1;
  30. }
  31.